package com.java.lambda.exercise;

import java.util.function.Function;

public class LambdaDemoLX1_02 {
    public static void main(String[] args) {
        //用匿名内部类重写一个apply方法。
        Integer result = typeConver(new Function<String, Integer>() {
            @Override
            public Integer apply(String s) {
                return Integer.valueOf(s);
            }
        });
        System.out.println(result + " 的类型是：" + (result.getClass().getName()));
        
        //lambda表达式写法
        Integer result1 = typeConver((String s) -> {
            return Integer.valueOf(s);
        });
        
        // 简化后的代码
        Integer result2 = typeConver(s -> Integer.valueOf(s));
        //-----
        //匿名内部类重写typeConver中的apply方法
//        String s = typeConver(new Function<String, String>() {
//            @Override
//            public String apply(String s) {
//                return s+"猪猪";
//            }
//        });
        
        String s = typeConver(s1 -> s1 +"猪猪");
        System.out.println(s);
    }
    
    public static <R> R typeConver(Function<String, R> function) {
        String str = "12345";
        R result = function.apply(str);
        return result;
    }
    
}
